﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Libreria.DAL;

namespace Libreria.RFID.Modelo
{
    [CAD(true,CAD.TiposBD._SQLServer,"RegistrosDeAcceso")]
    public class RegistroDeAcceso
    {
        //Atributo de Abstración
        private MOR accesoADatos;
        private Int32? identificadorAcceso;
        private String codigoTAG;
        private Int32? codigoPersona;
        private String nombrePersona;
        private DateTime fechaEntrada;
        private DateTime fechaSalida;



        //Constructor de la clase
        public RegistroDeAcceso()
        { 
        }

        public RegistroDeAcceso(string cadenaDeConexion)
        {
            this.accesoADatos = MOR.Instance(cadenaDeConexion);
        }

        //Encapsulamiento y mapeo de Atributos
        [Tipo(Tipo.TiposSQLServer._int,"identificadorAcceso",true,true)]
        public Int32? IdentificadorAcceso
        {
            get { return identificadorAcceso; }
            set { identificadorAcceso = value; }
        }
        [Tipo(Tipo.TiposSQLServer._varchar)]
        public String CodigoTAG
        {
            get { return codigoTAG; }
            set { codigoTAG = value; }
        }
        [Tipo(Tipo.TiposSQLServer._int)]
        public Int32? CodigoPersona
        {
            get { return codigoPersona; }
            set { codigoPersona = value; }
        }
        public String NombrePersona
        {
            get { return nombrePersona; }
            set { nombrePersona = value; }
        }
        [Tipo(Tipo.TiposSQLServer._datetime)]
        public DateTime FechaEntrada
        {
            get { return fechaEntrada; }
            set { fechaEntrada = value; }
        }
        [Tipo(Tipo.TiposSQLServer._datetime)]
        public DateTime FechaSalida
        {
            get { return fechaSalida; }
            set { fechaSalida = value; }
        }
        //Métodos de abstración de datos
        public void crear()
        {
            this.accesoADatos.crearRegistro(this);
        }

        public List<RegistroDeAcceso> consultar()
        {
            List<Object> registros = this.accesoADatos.consultarRegistros(this, false);
            List<RegistroDeAcceso> resultado = new List<RegistroDeAcceso>();
            foreach (Object registro in registros)
            {
                resultado.Add((RegistroDeAcceso)registro);
            }
            return resultado;
        }

        public RegistroDeAcceso consultarPorCodigoPersona(Int32 codigoPersona)
        {
            this.CodigoPersona = codigoPersona;
            List<Object> registros = this.accesoADatos.consultarRegistros(this, true);
            RegistroDeAcceso resultado = null;
            if (registros != null)
            {
                if (registros.Count == 1)
                {
                    resultado = (RegistroDeAcceso)registros[0];
                }
            }
            return resultado;
        }
        public RegistroDeAcceso consultarPorCodigoTAG(String codigoTAG)
        {
            this.codigoTAG = codigoTAG;
            List<Object> registros = this.accesoADatos.consultarRegistros(this, true);
            RegistroDeAcceso resultado = null;
            if (registros != null)
            {
                if (registros.Count == 1)
                {
                    resultado = (RegistroDeAcceso)registros[0];
                }
            }
            return resultado;
        }
        public void actualizar()
        {
            this.accesoADatos.actualizarRegistro(this);
        }

        public void eliminar()
        {
            this.accesoADatos.borrarRegistro(this);
        }
    }
}
